package com.woate.wingframework.persistent.api.session;

import com.woate.wingframework.persistent.api.BatchResult;
import com.woate.wingframework.persistent.api.ResultHandler;
import com.woate.wingframework.persistent.api.RowBounds;

import java.io.Closeable;
import java.sql.Connection;
import java.util.List;
import java.util.Map;

public interface SqlSession extends Closeable {

  <T> T selectOne(String id);

  <T> T selectOne(String id, Object parameter);

  <E> List<E> selectList(String id);

  <E> List<E> selectList(String id, Object parameter);

  <E> List<E> selectList(String id, Object parameter, RowBounds rowBounds);

  <K, V> Map<K, V> selectMap(String id, String mapKey);

  <K, V> Map<K, V> selectMap(String id, Object parameter, String mapKey);

  <K, V> Map<K, V> selectMap(String id, Object parameter, String mapKey, RowBounds rowBounds);

  void select(String id, Object parameter, ResultHandler handler);

  void select(String id, ResultHandler handler);

  void select(String id, Object parameter, RowBounds rowBounds, ResultHandler handler);

  int insert(String id);

  int insert(String id, Object parameter);

  int update(String id);

  int update(String id, Object parameter);

  int delete(String id);

  int delete(String id, Object parameter);

  void commit();

  void commit(boolean force);

  void rollback();

  void rollback(boolean force);

  List<BatchResult> flushStatements();

  @Override
  void close();

  <T> T getMapper(Class<T> type);

  Connection getConnection();
}
